/*
 * EntidadFisica.h
 *
 *  Created on: Oct 4, 2013
 *      Author: Hernan
 */

#ifndef ENTIDADFISICA_H_
#define ENTIDADFISICA_H_
#include <Box2D/Box2D.h>
#include "../constantes.h"
#include <string>
using namespace std;
class EntidadFisica {
public:
	EntidadFisica(string tipo);
	virtual void aplicarFuerzasFisicas();
	float obtenerPosicionX();
	float obtenerPosicionY();
	float obtenerAngulo();
	float obtenerVelocidadAngular();
	void guardarInformacionDeEntidad();
	b2Vec2 obtenerVelocidadLineal();
	b2FixtureDef* obtenerFixture();
	b2BodyDef* obtenerBodyDef();
	b2Body* obtenerCuerpo();
	void agregarEntidadIzquierda(EntidadFisica* entidadFisicaI);
	void agregarEntidadDerecha(EntidadFisica* entidadFisicaD);

	//guarda referencias de las entidades fisicas que puede jointear
	void setearElementosAJointear(EntidadFisica* entidadFisica1,EntidadFisica* entidadFisica2);
	virtual void jointear(b2World* world);
	float getAncho();
	float getAlto();
	void setAnclajePolea(pair<int,int> anclaje);
	pair<int,int> getAnclajePolea();
	virtual ~EntidadFisica();


	bool isRotaADerecha() {
		return RotaADerecha;
	}

	void setRotaADerecha(bool rotaADerecha) {
		RotaADerecha = rotaADerecha;
	}

	virtual string getTipo();

	bool isPelotaAdentro() {
		return pelotaAdentro;
	}

	void setPelotaAdentro(bool pelotaAdentro) {
		this->pelotaAdentro = pelotaAdentro;
	}

	void eliminarEntidadFisica();
	bool estaEliminado();
	virtual void destruirEntidadFisica();

	EntidadFisica* entidadDerecha;
	EntidadFisica* entidadIzquierda;

protected:
	b2BodyDef* definicionCuerpoFisico;
	b2Body* cuerpoFisico;
	b2FixtureDef* fixture;

	EntidadFisica* aJointearInicial;
	EntidadFisica* aJointearFinal;

	float alto;
	float ancho;
	bool RotaADerecha;
	string tipo;

	//indicador de que tiene pelota adentro
	bool pelotaAdentro;
	bool eliminado;

	//posicion anclaje polea.
	pair<int,int> posAnclajePolea;


};

#endif /* ENTIDADFISICA_H_ */
